import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"

export function cn(...inputs: ClassValue[]) {
  return twMerge(clsx(inputs))
}

// 验证URL的有效性
export function isValidUrl(url: string): boolean {
  if (!url.trim()) return false;
  
  // 检查是否已经包含协议
  if (url.startsWith('http://') || url.startsWith('https://')) {
    try {
      new URL(url);
      return true;
    } catch (e) {
      return false;
    }
  }
  
  // 尝试添加https://后验证
  try {
    new URL(`https://${url}`);
    return true;
  } catch (e) {
    // 不是有效的URL，但可能是普通文本
    return true; // 允许任何非空文本
  }
}

// Base64加密
export function base64Encode(text: string): string {
  try {
    return btoa(unescape(encodeURIComponent(text)));
  } catch (error) {
    console.error('Base64加密失败:', error);
    throw new Error('Base64加密失败');
  }
}

// Base64解密
export function base64Decode(encoded: string): string {
  try {
    return decodeURIComponent(escape(atob(encoded)));
  } catch (error) {
    console.error('Base64解密失败:', error);
    throw new Error('Base64解密格式错误');
  }
}

// MD5加密（简化版，实际项目中可能需要使用更完善的实现）
export function md5Hash(text: string): string {
  try {
    // 简化版MD5实现，实际项目中建议使用专门的库
    let hash = 0;
    if (text.length === 0) return hash.toString();
    
    for (let i = 0; i < text.length; i++) {
      const char = text.charCodeAt(i);
      hash = ((hash << 5) - hash) + char;
      hash = hash & hash; // 转换为32位整数
    }
    
    // 将整数转换为16进制字符串
    let hexString = "";
    for (let i = 0; i < 8; i++) {
      const hex = ((hash >> (i * 4)) & 0x0F).toString(16);
      hexString = hex + hexString;
    }
    
    return hexString;
  } catch (error) {
    console.error('MD5加密失败:', error);
    throw new Error('MD5加密失败');
  }
}
